package cn.tedu.charging.cost.pojo.po;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.math.BigDecimal;

/**
 * 通过ES 保存充电进度数据
 * 解决 本地Map的问题
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
//类似 plus @TableName 的功能 做表的映射
@Document(indexName = "charging_data_2408")
public class ChargingDataPO {

    @Id
    String id;
    String orderNo;//订单编号
    Integer userId;//用户id
    Long startTime;//开始时间,可以是 订单创建的时间  也可以是 设备第一次同步的时间
    Integer count;//次数
    BigDecimal totalFee;//总花费
    Float chargingCapacity;//充电度数

    public void setTotalFee(BigDecimal totalFee) {
        //判断是否是第一次
        if (isFirst()) {
            //第一次直接赋值
            this.totalFee = totalFee;
        }else {
            //不是第一次 用本次 加上 上次
            this.totalFee = this.totalFee.add(totalFee);
        }
    }

    public Float getChargingCapacity(Float chargingCapacity) {
        //判断是否是第一次
        if (isFirst()) {
            //第一次直接赋值
            return chargingCapacity;
        }else {
            //不是第一次 用本次 减去 上次
            return chargingCapacity - this.chargingCapacity;
        }
    }

    /**
     * 判断同步充电进度是否是第一次
     * 判断的逻辑 从 业务层service 移动到了PO里
     *
     * O pojo 普通的 java object 简单的数据类 只有数据没有业务
     *
     * 充血模型 数据类 增加了业务方法 又有数据，又有业务
     * 贫血模型 数据类 没有业务方法
     *
     * BO business object 业务对象
     *
     * 领域模型  DDD 领域驱动开发
     *
     * UserBO
     * {
     *     userId
     *     userName
     *
     *     public reg(){
     *        saveUser()
     *     }
     *
     *    public login(){
     *
     *    }
     *
     *    public logout(){
     *
     *    }
     *
     * }
     * OrderBO
     *
     * @return
     */
    public Boolean isFirst(){
        return count == 1;
    }
}
